# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Dataproc.V1.Model.Job do
  @moduledoc """
  A Dataproc job resource.

  ## Attributes

  *   `done` (*type:* `boolean()`, *default:* `nil`) - Output only. Indicates whether the job is completed. If the value is false, the job is still in progress. If true, the job is completed, and status.state field will indicate if it was successful, failed, or cancelled.
  *   `driverControlFilesUri` (*type:* `String.t`, *default:* `nil`) - Output only. If present, the location of miscellaneous control files which can be used as part of job setup and handling. If not present, control files might be placed in the same location as driver_output_uri.
  *   `driverOutputResourceUri` (*type:* `String.t`, *default:* `nil`) - Output only. A URI pointing to the location of the stdout of the job's driver program.
  *   `driverSchedulingConfig` (*type:* `GoogleApi.Dataproc.V1.Model.DriverSchedulingConfig.t`, *default:* `nil`) - Optional. Driver scheduling configuration.
  *   `flinkJob` (*type:* `GoogleApi.Dataproc.V1.Model.FlinkJob.t`, *default:* `nil`) - Optional. Job is a Flink job.
  *   `hadoopJob` (*type:* `GoogleApi.Dataproc.V1.Model.HadoopJob.t`, *default:* `nil`) - Optional. Job is a Hadoop job.
  *   `hiveJob` (*type:* `GoogleApi.Dataproc.V1.Model.HiveJob.t`, *default:* `nil`) - Optional. Job is a Hive job.
  *   `jobUuid` (*type:* `String.t`, *default:* `nil`) - Output only. A UUID that uniquely identifies a job within the project over time. This is in contrast to a user-settable reference.job_id that might be reused over time.
  *   `labels` (*type:* `map()`, *default:* `nil`) - Optional. The labels to associate with this job. Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values can be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be associated with a job.
  *   `pigJob` (*type:* `GoogleApi.Dataproc.V1.Model.PigJob.t`, *default:* `nil`) - Optional. Job is a Pig job.
  *   `placement` (*type:* `GoogleApi.Dataproc.V1.Model.JobPlacement.t`, *default:* `nil`) - Required. Job information, including how, when, and where to run the job.
  *   `prestoJob` (*type:* `GoogleApi.Dataproc.V1.Model.PrestoJob.t`, *default:* `nil`) - Optional. Job is a Presto job.
  *   `pysparkJob` (*type:* `GoogleApi.Dataproc.V1.Model.PySparkJob.t`, *default:* `nil`) - Optional. Job is a PySpark job.
  *   `reference` (*type:* `GoogleApi.Dataproc.V1.Model.JobReference.t`, *default:* `nil`) - Optional. The fully qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a job_id.
  *   `scheduling` (*type:* `GoogleApi.Dataproc.V1.Model.JobScheduling.t`, *default:* `nil`) - Optional. Job scheduling configuration.
  *   `sparkJob` (*type:* `GoogleApi.Dataproc.V1.Model.SparkJob.t`, *default:* `nil`) - Optional. Job is a Spark job.
  *   `sparkRJob` (*type:* `GoogleApi.Dataproc.V1.Model.SparkRJob.t`, *default:* `nil`) - Optional. Job is a SparkR job.
  *   `sparkSqlJob` (*type:* `GoogleApi.Dataproc.V1.Model.SparkSqlJob.t`, *default:* `nil`) - Optional. Job is a SparkSql job.
  *   `status` (*type:* `GoogleApi.Dataproc.V1.Model.JobStatus.t`, *default:* `nil`) - Output only. The job status. Additional application-specific status information might be contained in the type_job and yarn_applications fields.
  *   `statusHistory` (*type:* `list(GoogleApi.Dataproc.V1.Model.JobStatus.t)`, *default:* `nil`) - Output only. The previous job status.
  *   `trinoJob` (*type:* `GoogleApi.Dataproc.V1.Model.TrinoJob.t`, *default:* `nil`) - Optional. Job is a Trino job.
  *   `yarnApplications` (*type:* `list(GoogleApi.Dataproc.V1.Model.YarnApplication.t)`, *default:* `nil`) - Output only. The collection of YARN applications spun up by this job.Beta Feature: This report is available for testing purposes only. It might be changed before final release.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :done => boolean() | nil,
          :driverControlFilesUri => String.t() | nil,
          :driverOutputResourceUri => String.t() | nil,
          :driverSchedulingConfig => GoogleApi.Dataproc.V1.Model.DriverSchedulingConfig.t() | nil,
          :flinkJob => GoogleApi.Dataproc.V1.Model.FlinkJob.t() | nil,
          :hadoopJob => GoogleApi.Dataproc.V1.Model.HadoopJob.t() | nil,
          :hiveJob => GoogleApi.Dataproc.V1.Model.HiveJob.t() | nil,
          :jobUuid => String.t() | nil,
          :labels => map() | nil,
          :pigJob => GoogleApi.Dataproc.V1.Model.PigJob.t() | nil,
          :placement => GoogleApi.Dataproc.V1.Model.JobPlacement.t() | nil,
          :prestoJob => GoogleApi.Dataproc.V1.Model.PrestoJob.t() | nil,
          :pysparkJob => GoogleApi.Dataproc.V1.Model.PySparkJob.t() | nil,
          :reference => GoogleApi.Dataproc.V1.Model.JobReference.t() | nil,
          :scheduling => GoogleApi.Dataproc.V1.Model.JobScheduling.t() | nil,
          :sparkJob => GoogleApi.Dataproc.V1.Model.SparkJob.t() | nil,
          :sparkRJob => GoogleApi.Dataproc.V1.Model.SparkRJob.t() | nil,
          :sparkSqlJob => GoogleApi.Dataproc.V1.Model.SparkSqlJob.t() | nil,
          :status => GoogleApi.Dataproc.V1.Model.JobStatus.t() | nil,
          :statusHistory => list(GoogleApi.Dataproc.V1.Model.JobStatus.t()) | nil,
          :trinoJob => GoogleApi.Dataproc.V1.Model.TrinoJob.t() | nil,
          :yarnApplications => list(GoogleApi.Dataproc.V1.Model.YarnApplication.t()) | nil
        }

  field(:done)
  field(:driverControlFilesUri)
  field(:driverOutputResourceUri)
  field(:driverSchedulingConfig, as: GoogleApi.Dataproc.V1.Model.DriverSchedulingConfig)
  field(:flinkJob, as: GoogleApi.Dataproc.V1.Model.FlinkJob)
  field(:hadoopJob, as: GoogleApi.Dataproc.V1.Model.HadoopJob)
  field(:hiveJob, as: GoogleApi.Dataproc.V1.Model.HiveJob)
  field(:jobUuid)
  field(:labels, type: :map)
  field(:pigJob, as: GoogleApi.Dataproc.V1.Model.PigJob)
  field(:placement, as: GoogleApi.Dataproc.V1.Model.JobPlacement)
  field(:prestoJob, as: GoogleApi.Dataproc.V1.Model.PrestoJob)
  field(:pysparkJob, as: GoogleApi.Dataproc.V1.Model.PySparkJob)
  field(:reference, as: GoogleApi.Dataproc.V1.Model.JobReference)
  field(:scheduling, as: GoogleApi.Dataproc.V1.Model.JobScheduling)
  field(:sparkJob, as: GoogleApi.Dataproc.V1.Model.SparkJob)
  field(:sparkRJob, as: GoogleApi.Dataproc.V1.Model.SparkRJob)
  field(:sparkSqlJob, as: GoogleApi.Dataproc.V1.Model.SparkSqlJob)
  field(:status, as: GoogleApi.Dataproc.V1.Model.JobStatus)
  field(:statusHistory, as: GoogleApi.Dataproc.V1.Model.JobStatus, type: :list)
  field(:trinoJob, as: GoogleApi.Dataproc.V1.Model.TrinoJob)
  field(:yarnApplications, as: GoogleApi.Dataproc.V1.Model.YarnApplication, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.Dataproc.V1.Model.Job do
  def decode(value, options) do
    GoogleApi.Dataproc.V1.Model.Job.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Dataproc.V1.Model.Job do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
